home *** CD-ROM | disk | FTP | other *** search
- #include "NotificationMon.h"
-
- #define PrefsID 128
- #define PrefsOK 1
- #define PrefsCAN 2
- #define PrefsFlash 6
- #define PrefsHide 5
- #define PrefsBGSleep 3
- #define PrefsFGSleep 4
- #define PrefsHilite 9
-
- #define ENTER_KEY 0x03
- #define TAB_KEY 0x09
- #define BACKSPACE_KEY 0x08
- #define RETURN_KEY 0x0D
- #define ESCAPE_KEY 0x1B
- #define ABORT_KEY '.'
-
- pascal void HiliteItemProc(WindowPtr wp, short item);
-
- Boolean IsCursorControlKey(char key)
- {
- Boolean result = false;
-
- if ( (key >= 0x28) && (key <= 0x31) )
- result = true;
- else if(key == TAB_KEY)
- result = true;
- else if(key == BACKSPACE_KEY)
- result = true;
-
- return result;
- }
-
- pascal Boolean PrefsFilter(DialogPtr dp, EventRecord *event, short *item)
- {
- Boolean result = false;
- char key;
- long endTicks;
- Boolean cmdKeyDown;
-
- if( ! ((event->what == keyDown) || (event->what == autoKey)) )
- return false;
-
- key = (char)event->message & charCodeMask;
- cmdKeyDown = (Boolean)((event->modifiers & cmdKey) != false);
- if ( (key == RETURN_KEY) || (key == ENTER_KEY) ||
- (cmdKeyDown && ((key == 'O') || (key == 'o'))) ) {
- SetDialogCtlHilite(dp,PrefsOK,1);
- Delay(15, &endTicks);
- SetDialogCtlHilite(dp,PrefsOK,0);
- Delay(10, &endTicks);
- result = true;
- *item = PrefsOK;
- } else if((key == ESCAPE_KEY)
- || ( (cmdKeyDown)
- && ( (key == '.')
- || (key == '`')
- || (key == 'c') || (key == 'C') ))) {
-
- SetDialogCtlHilite(dp,PrefsCAN,1);
- Delay(15,&endTicks);
- SetDialogCtlHilite(dp,PrefsCAN,0);
- Delay(10,&endTicks);
- result = true;
- *item = PrefsCAN;
- } else if(IsCursorControlKey(key)) {
- result = false;
- } else if( (key < '0') || (key > '9') ) {
- SysBeep(5);
- result = true;
- }
-
- return result;
- }
-
- void DoNotificationPrefsDialog(notificationDoc *nmd)
- {
- DialogPtr dp;
- short itemHit;
-
- dp = GetNewDialog(PrefsID,nil,(WindowPtr)-1);
- SetDialogCtlValue(dp,PrefsHide,nmd->prefs.hideWindowInBackground);
- SetDialogCtlValue(dp,PrefsFlash,nmd->prefs.notifyNewMessage);
- PutNumericItem(dp,PrefsBGSleep,nmd->prefs.backTime);
- PutNumericItem(dp,PrefsFGSleep,nmd->prefs.foreTime);
- SetUserItemProc(dp, PrefsHilite, HiliteItemProc);
-
- ShowWindow(dp);
- do {
- ModalDialog(PrefsFilter,&itemHit);
- switch(itemHit) {
- case PrefsHide:
- case PrefsFlash:
- SetDialogCtlValue(dp,itemHit,
- !GetDialogCtlValue(dp,itemHit));
- break;
- }
- } while( (itemHit != PrefsOK) && (itemHit != PrefsCAN));
-
- if(itemHit == PrefsOK) {
- nmd->prefs.hideWindowInBackground = GetDialogCtlValue(dp,PrefsHide);
- nmd->prefs.notifyNewMessage = GetDialogCtlValue(dp,PrefsFlash);
- nmd->prefs.backTime = GetNumericItem(dp,PrefsBGSleep);
- nmd->prefs.foreTime = GetNumericItem(dp,PrefsFGSleep);
- }
- DisposDialog(dp);
- }
-
- void InitNotificationPrefs(notificationDoc *nmd)
- {
- Handle prefs;
-
- if(prefs = GetResource('PREF',128)) {
- BlockMove(*prefs,&nmd->prefs,sizeof(prefRec));
- ReleaseResource(prefs);
- MoveWindow(&nmd->nWin.port,
- nmd->prefs.windowLoc.left,
- nmd->prefs.windowLoc.top,
- false);
- SizeWindow(&nmd->nWin,
- RECT_WIDTH(nmd->prefs.windowLoc),
- RECT_HEIGHT(nmd->prefs.windowLoc),
- false);
- } else {
- nmd->prefs.hideWindowInBackground = false;
- nmd->prefs.notifyNewMessage = true;
- nmd->prefs.backTime = 60 * 15; /* Maybe every 15 seconds we run */
- nmd->prefs.foreTime = 60 * 5; /* we don't need much time */
- /* leaving windowloc field uninitialized */
- }
-
- }
-
- void UpdateNotificationPrefs(notificationDoc *nmd)
- {
- prefRec **prefs;
- short err;
-
- GetWindowGlobalRect(&nmd->nWin.port,
- &nmd->nWin.port.portRect,
- &nmd->prefs.windowLoc);
-
- if(prefs = GetResource('PREF',128)) {
- BlockMove(&nmd->prefs,*prefs,sizeof(prefRec));
- ChangedResource(prefs);
- if(err = ResError()) {
- error("\pChangedResource fail in UpdateNotificationPrefs",err);
- return;
- }
- ReleaseResource(prefs);
- } else {
- prefs = NewHandle(sizeof(prefRec));
- if(!prefs) {
- error("\pError - update prefs failed.",MemError());
- return;
- }
- BlockMove(&nmd->prefs,*prefs,sizeof(prefRec));
- AddResource(prefs,'PREF',128,"\p");
- if(err = ResError()) {
- error("\pUpdateNotificationPrefs addres fail.",err);
- return;
- }
- ReleaseResource(prefs);
- }
- }
-